Quick start guides, frequently asked questions, and ways to reach our team.
Download Roomie Remote X, create a home, and add your first room. The app will auto-discover compatible devices on your network.
Roomie supports IP, IR, and serial control. Most modern devices are added via IP auto-discovery.
Activities let you control multiple devices with a single tap — power on your system, set inputs, and dim the lights all at once.
Google requires end users to set up their own Device Access project to enable Nest thermostat control. While there are many steps involved, once completed, it works quite well. Read all steps before starting.
Prerequisites
Step 1: Register for Device Access
Step 2: Create a Project
Step 3: Enable the API and Create OAuth Credentials
com.roomie.unified exactly.Step 4: Enable the Smart Device Management API
Step 5: Create Credentials
com.roomie.unified as the Bundle ID, 1455871956 as the App Store ID, and DDDDD99DD9 as the Team ID. Tap CREATE.Step 6: Copy the iOS URL Scheme
Step 7: Link OAuth Client to Your Project
Step 8: Configure the OAuth Consent Screen
Step 9: Add the Cloud Service in Roomie
Note: Ignore extraneous text on Google's pages — much of it does not apply. Do not follow other instructions besides these steps. Google may make minor changes to these pages over time.
Roomie Remote includes a Local Network Control HTTP API on port 47147 for starting activities and sending device commands from any system on your local network. This enables integration with home automation controllers, custom scripts, and third-party systems.
All API endpoints use JSON. Responses follow this format:
{
"st" : "success" | "fail" | "error",
"da" : <response data>,
"co" : <HTTP status code>
}
A "st" value of "success" means the request was handled. "fail" indicates a problem with the request data. "error" indicates a server-side problem.
Returns all activities in the active Roomie configuration with their UUIDs.
GET /api/v1/activitiesResponse data: array of activity objects:
{
"icon" : <string: Activity icon name>,
"roomuuid" : <string: UUID of the room>,
"name" : <string: Activity name>,
"toggle" : <boolean: Toggle state after starting>,
"type" : <string: "off" if PowerOff activity>,
"uuid" : <string: Activity UUID>
}
Note: Toggle activities are listed twice. The "on" UUID has a + suffix and the "off" UUID has a - suffix. The name contains "(On)" or "(Off)".
10.3 Beta
Each activity object now also exposes the device UUIDs bound to its volume, transport (source), guide, and aux roles. Each field is present only when the activity defines that binding — test for key presence rather than nil/empty. These let external bridges route their own commands (e.g. "send VolumeUp to whichever device owns volume in the active activity") without going through the higher-level /api/v1/remote/press endpoint below.
{
"vuuid" : <optional string: Volume device UUID>,
"openuuid" : <optional string: Transport / source device UUID>,
"guideuuid" : <optional string: Guide device UUID>,
"auxuuids" : <optional array: Aux device UUIDs>
}
$ curl -X GET 'http://<roomie-ip>:47147/api/v1/activities'
{
"st" : "success",
"da" : [
{
"icon" : "logo-tivo",
"roomuuid" : "D3579B0E-6E36-...",
"name" : "Living Room: Watch TiVo",
"uuid" : "4A4A6B37-BE64-...",
"vuuid" : "AB12CD34-...",
"openuuid" : "EF56AB78-..."
},
{
"icon" : "curtains",
"roomuuid" : "D3579B0E-6E36-...",
"name" : "Living Room: Shades (On)",
"toggle" : true,
"uuid" : "2FC827F4-FF07-...+"
}
],
"co" : 200
}
Execute a specific activity. Supports optional delay and toggle state control.
POST /api/v1/runactivity{
"au" : <required string: Activity UUID>,
"ts" : <optional string: "on" | "off" — toggle state>,
"de" : <optional integer: delay in seconds, must be > 1.0>
}
A simplified GET variation is available for systems that don't support JSON:
GET /api/v1/activity/<Activity UUID>Note: Advanced options like delay are not available with the simplified GET syntax.
$ curl -X POST 'http://<roomie-ip>:47147/api/v1/runactivity' \
-d '{ "au" : "53B7B23B-F70F-498D-A128-477FCBD05A58" }'
{ "st" : "success", "da" : {}, "co" : 200 }
Returns all devices in the active configuration with UUIDs and properties.
GET /api/v1/devicesResponse data: array of device objects:
{
"address" : <string: Device IP address>,
"port" : <integer: Device port>,
"model" : <string: Device model>,
"uuid" : <string: Device UUID>,
"roomname" : <string: Room name>,
"brand" : <string: Device brand>,
"type" : <string: Device type>,
"name" : <string: Device name>,
"roomuuid" : <string: Room UUID>
}
$ curl -X GET 'http://<roomie-ip>:47147/api/v1/devices'
{
"st" : "success",
"da" : [
{
"address" : "10.0.0.49",
"port" : 8060,
"model" : "All Models",
"uuid" : "A94CF6C9-D458-...",
"roomname" : "Living Room",
"brand" : "Roku",
"type" : "Player",
"name" : "Roku Media Player",
"roomuuid" : "D3579B0E-6E36-..."
}
],
"co" : 200
}
Send a command to a specific device. If a repeat option is specified, use the refresh API to keep the command repeating — sessions expire after 0.3 seconds.
POST /api/v1/sendcommands{
"de" : <optional string: Delay in ms before sending>,
"cs" : [
{
"ty" : <required: "command" | "activity" | "url">,
"de" : <optional string: Delay in ms>,
"pa" : { ... } // Params vary by type
}
]
}
Command params ("ty": "command"):
{
"cm" : <required: Command name in caps>,
"device" : <required: Device UUID>,
"cd" : <optional: { "au": toggle UUID, "ts": "on"|"off" }>,
"pd" : <optional: Power delay in ms>,
"dl" : <optional: "yes"|"no" delay devices globally>,
"re" : <optional: "constant"|"progressive" repeat type>,
"pa" : <optional: Array of up to 3 parameter strings>
}
Activity params ("ty": "activity"):
{
"au" : <required: Activity UUID>,
"ts" : <optional: "on"|"off" toggle state>
}
URL params ("ty": "url"):
{
"ur" : <required: URL to load, include scheme (http://)>
}
Note: The API currently handles a single command despite accepting an array. The response includes a session identifier for managing repeating commands.
$ curl -X POST 'http://<roomie-ip>:47147/api/v1/sendcommands' \
-d '{ "de": "1000", "cs": [ { "ty": "command",
"pa": { "cm": "VOLUME UP",
"device": "2DCCA135-4264-...",
"re": "constant" } } ] }'
{
"st" : "success",
"da" : { "se" : "96F4C281-B34D-..." },
"co" : 200
}
Keep a repeating command alive. Sessions expire after 0.3 seconds — call this more frequently to continue repeating. Not needed if sendcommands was called without a repeat option.
POST /api/v1/refreshcommands{
"se" : <required: Command session identifier>
}
Stop a repeating command immediately rather than waiting for the 0.3-second session timeout. Not needed if sendcommands was called without a repeat option.
POST /api/v1/stopcommands{
"se" : <required: Command session identifier>
}
Play an audio file (wav, aif, or mp3) on all Roomie instances currently open and in the foreground, including Apple TV. Files must first be added via Roomie's Settings > Add Custom Media.
GET /api/v1/media/<Media Filename>$ curl -X GET 'http://<roomie-ip>:47147/api/v1/media/doorbell.wav'
A device-independent control surface for hard-button remotes (Logitech Harmony-style). Send symbolic button presses (VolumeUp, Play, Up, Activity1, etc.) scoped to a room, and Roomie resolves the press against the room's currently-running activity and dispatches to the correct device. The endpoints below are new in 10.3 Beta and may change before final release.
Returns each room with its currently-running activity (if any) and an ordered list of visible activities. Bridges call this once during pairing to let the user choose which room a hard-button remote controls.
GET /api/v1/roomsResponse data: array of room objects.
{
"roomuuid" : <string: Room UUID>,
"roomname" : <string: Room name>,
"currentactivityuuid" : <optional string: Active activity UUID>,
"currentactivityname" : <optional string: Active activity name>,
"activities" : [
{ "activityuuid" : <string>, "name" : <string> }
]
}
Note: The activities array is filtered to visible non-off activities only — the same set that Activity1 through Activity8 indexes into in /api/v1/remote/press.
$ curl -X GET 'http://<roomie-ip>:47147/api/v1/rooms'
{
"st" : "success",
"da" : [
{
"roomuuid" : "D3579B0E-6E36-...",
"roomname" : "Living Room",
"currentactivityuuid" : "4A4A6B37-BE64-...",
"currentactivityname" : "Watch Apple TV",
"activities" : [
{ "activityuuid" : "4A4A6B37-BE64-...", "name" : "Watch Apple TV" },
{ "activityuuid" : "B12CD34E-5F67-...", "name" : "Watch Cable" }
]
}
],
"co" : 200
}
Dispatches a symbolic button press. Roomie resolves the button against the addressed room's currently-running activity and sends the appropriate device command — no need for the caller to know which device owns each function.
POST /api/v1/remote/press{
"button" : <required string: Lexicon name (see below)>,
"roomuuid" : <preferred string: Target room UUID>,
"roomname" : <optional string: Target room name (case-insensitive)>,
"activityuuid" : <optional string: Override the currently-running activity>,
"action" : <optional string: "tap" | "press" | "release" | "repeat">,
"digits" : <optional string: Channel number (Channel button only)>,
"count" : <optional integer: Number of taps (action=repeat only)>,
"hold_ms" : <optional integer: Auto-release delay in ms (action=press only)>,
"session" : <required string for action=release: Session UUID to end>
}
Addressing resolution order:
activityuuid override — searched across all rooms.roomuuid — current activity for that room.roomname (case-insensitive) — current activity for the matched room.Action semantics:
tap (default) — single dispatch.press — start a continuously-repeating command; returns a session to end with release (or use hold_ms for server-side auto-release).release — end the named session. Equivalent to /api/v1/stopcommands with the session.repeat — fire count discrete taps with a small inter-tap delay.Status codes:
200 — dispatched successfully.400 — missing or unknown button; missing session for release.404 — unknown room or activity; ActivityN beyond the room's visible activity count.409 — room found but no activity currently running.422 — activity has no binding for the button's role (e.g. Pause in a Hue-only scene).Button lexicon (send any name verbatim):
Power, PowerOff, PowerToggleActivityOff, ActivityPowerOff, Activity1…Activity8VolumeUp, VolumeDown, VolumeMute, VolumeMuteToggleChannelUp, ChannelDown, ChannelPrevious, ChannelEnter, Channel (accepts digits)Play, Pause, PlayPause, Stop, Record, FastForward, Rewind, SkipForward, SkipBackward, NextTrack, PreviousTrack, Replay, AdvanceUp, Down, Left, Right, Select, Back, Menu, Home, Exit, Info, GuideDigit0…Digit9, Dash, Clear, EnterRed, Green, Yellow, BluePageUp, PageDown, DVR, OnDemand, Live, Audio, CC, Subtitle, AspectRatio, PictureMode, InputToggle, A, B, C, DVolume hold/release:
$ curl -X POST 'http://<roomie-ip>:47147/api/v1/remote/press' \
-d '{ "button": "VolumeUp", "roomuuid": "D3579B0E-...", "action": "press" }'
{ "st": "success",
"da": { "button": "VolumeUp", "role": "volume",
"deviceuuid": "AB12CD34-...", "command": "VolumeUp",
"session": "96F4C281-...", "dispatched": true },
"co": 200 }
$ curl -X POST 'http://<roomie-ip>:47147/api/v1/remote/press' \
-d '{ "action": "release", "session": "96F4C281-..." }'
{ "st": "success", "da": { "dispatched": true, "session": "96F4C281-..." }, "co": 200 }
Channel tune:
$ curl -X POST 'http://<roomie-ip>:47147/api/v1/remote/press' \
-d '{ "button": "Channel", "roomuuid": "D3579B0E-...", "digits": "704" }'
Switch activities (macro button):
$ curl -X POST 'http://<roomie-ip>:47147/api/v1/remote/press' \
-d '{ "button": "Activity2", "roomuuid": "D3579B0E-..." }'
Returns the resolution result for every button in the lexicon, scoped to the addressed activity. Smart bridges use this to dim or hide buttons that wouldn't dispatch successfully — a single round trip instead of probing each button.
GET /api/v1/remote/capabilities?roomuuid=<UUID>Same addressing query parameters as /remote/press: roomuuid, roomname, or activityuuid.
Response data:
{
"roomuuid" : <string>,
"roomname" : <string>,
"activityuuid" : <string>,
"activityname" : <string>,
"lexicon_version" : <integer: Increments when buttons are added>,
"buttons" : {
"<ButtonName>" : <resolution dict, or null if unsupported in this activity>,
...
}
}
$ curl -X GET 'http://<roomie-ip>:47147/api/v1/remote/capabilities?roomuuid=D3579B0E-...'
{
"st" : "success",
"da" : {
"roomname" : "Living Room",
"activityname" : "Watch Apple TV",
"lexicon_version" : 1,
"buttons" : {
"VolumeUp" : { "deviceuuid": "AB12CD34-...", "role": "volume", "command": "VolumeUp" },
"Play" : { "deviceuuid": "EF56AB78-...", "role": "transport", "command": "Play" },
"ChannelUp" : null,
"Activity1" : { "activityuuid": "4A4A6B37-...", "activityname": "Watch Apple TV", "role": "activity" }
}
},
"co" : 200
}
HTTP Activity & Device Command Interface v9.2 — Updated December 2, 2024 · Universal Remote endpoints (10.3 Beta) added April 2026
First, select which IR adapter you're using:
4998, then select the type, brand, and model of the device to be controlled.Need an IR100? Visit the Roomie Store — available in 4 models.
4998, then select the type, brand, and model of the device to be controlled.If your intended Primary is an Apple TV: do the initial Restore Home on an iOS, iPadOS, or macOS Controller first — tvOS cannot access iCloud Drive or file pickers and cannot be the restore target. That Controller becomes Primary during the restore. After verifying it works, install on the Apple TV (it joins as a secondary) and switch the Primary designation to it via Settings > Homes > Primary Controller (step 15 below).
~/Library/Group Containers/group.com.roomie, ~/Library/Containers/maccatalyst.com.roomie.x (and com.roomie.unified), and ~/Library/Containers/Roomie Remote. Some may not exist — that's fine.Roomie Remote X
The fastest way to get help. Open the app, tap the menu, and select Support. You'll be connected to an AI Support Agent that can diagnose issues, walk you through setup, and answer questions instantly.
Roomie Remote & Now Showing
Join the community on Reddit. Share setups, get tips from other users, discuss feature requests, and stay up to date on releases.
Visit RedditRoomie Remote & Now Showing
For direct email support, use the built-in ticket submission in either app. In Roomie Remote, tap the email icon in the Support panel. In Now Showing, tap Send Feedback. Both include diagnostic information to help us resolve your issue faster.
Community Archive · 2012–2025
Browse 13 years of community tips, solutions, and device setup guides from the Roomie Remote forum archive.
Browse Archive